package lessons.no7;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

public class N7_3_1 {
    public static void main(String[] args)throws Exception {
        N7_3_1 myclass = new N7_3_1();

       // myclass.testFileReader();
       // myclass.testFileWriter();
        myclass.testCopyFile1();
        //myclass.testCopyFile2();
    }

    public void testFileReader()throws Exception
    {
        // 创建FileReader对象，并指定需要读取的文件
		FileReader fileReader = new FileReader("reader.txt");
		// 定义一个int类型的变量len，其初始化值为0
		int len = 0;
		// 通过循环来判断是否读取到了文件末尾
		while ((len = fileReader.read()) != -1) {
			// 输出读取到的字符
			System.out.print((char)len);
		}
		// 关闭流
		fileReader.close();
    }

    public void testFileWriter()throws Exception
    {
        // 创建字符输出流对象，并指定输出文件
		FileWriter fileWriter = new FileWriter("writer.txt");
        //在文件末尾追加内容
        //FileWriter fileWriter = new FileWriter("writer.txt",true);
		// 将定义的字符写入文件
		fileWriter.write("轻轻的我走了，\r\n");
		fileWriter.write("正如我轻轻的来；\r\n");
		fileWriter.write("我轻轻的招手，\r\n");
		fileWriter.write("作别西天的云彩。\r\n");
		// 关闭流
		fileWriter.close();
    }

    public void testCopyFile1()throws Exception
    {
        // 创建FileReader对象，并指定需要读取的文件
		FileReader fileReader = new FileReader("reader.txt");
		// 创建FileWriter对象，并指定写入数据的目标文件
		FileWriter fileWriter = new FileWriter("writer.txt");
		// 定义一个int类型的变量len，其初始化值为0
		int len = 0;
		// 定义一个长度为1024的字符数组
		char[] buff = new char[1024];
		// 通过循环来判断是否读取到了文件末尾
		while ((len = fileReader.read(buff)) != -1) {
			// 输出读取到的字符
			fileWriter.write(buff, 0, len);
		}
		// 关闭流
		fileReader.close();
		fileWriter.close();
    }

    public void testCopyFile2()throws Exception
    {
        // 创建一个字符输入缓冲流对象
		BufferedReader br = new BufferedReader(
							new FileReader("reader.txt "));
		// 创建一个字符输出缓冲流对象
		BufferedWriter bw = new BufferedWriter(
							new FileWriter("writer.txt"));
		// 声明一个字符串变量str
		String str =null;
		// 循环时每次读取一行文本，如果不为null（即到了文件末尾），则继续循环
		while ((str = br.readLine()) != null) {
			// 通过缓冲流对象写入文件
			bw.write(str);
			// 写入一个换行符，该方法会根据不同的操作系统生成相应的换行符
			bw.newLine();
		}
		// 关闭流
		br.close();
		bw.close();
    }
}
